import axios from 'axios'

/**
 * 封装axios，减少学习成本，参数基本跟jq ajax一致
 * @param {String} type			请求的类型，默认post
 * @param {String} url				请求地址
 * @param {String} time			超时时间
 * @param {Object} data			请求参数
 * @param {String} dataType		预期服务器返回的数据类型，xml html json ...
 * @param {Object} headers			自定义请求headers
 * @param {Function} success		请求成功后，这里会有两个参数,服务器返回数据，返回状态，[data, res]
 * @param {Function} error		发送请求前
 * @param return
 */
export function ajax(opts) {
  if (!opts.url) {
    throw new Error('请填写接口地址')
  }
  const params = {
    method: opts.type || 'post',
    url: opts.url,
    headers: opts.headers || {'Content-Type': 'application/x-www-form-urlencoded'},
    baseURL: conf.http,
    timeout: opts.time || 20 * 1000,
    responseType: opts.dataType || 'json'
  }
  if (opts.url && (opts.type === 'get' || opts.type === 'GET')) {
    params.params = opts.data
  } else {
    let formData = new FormData()
    for (let key in opts.data) {
      formData.append(key, opts.data[key])
    }
    params.data = formData
  }

  axios(params).then(function(res) {
    if (res.status === 200) {
      let data = res.data
      if (data.error !== 0) {
        Message.warning(data.msg)
      } else if (opts.success) {
        opts.success(data)
      }
    } else {
      if (opts.error) {
        opts.error(error)
      } else {
        throw new Error(res.statusText)
      }
    }
  }).catch(function (error) {
    console.log(error)
    Message.error('请求超时！')
  })
}
